﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Pencas.Models;

namespace Pencas.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            if (Session["usuario"] == null)
            {
                ViewBag.Mensaje = "";
                Response.Redirect("Login");
            }
            //PencasDB db = new PencasDB();
            //DAOUsuario usuarioDAO = new DAOUsuario();
            //List<Usuario> usuarios = usuarioDAO.GetUsuarios();
            //ViewBag.Valor = usuarios[0].Email;
            return View();
        }

        public PartialViewResult EnviarPronostico(string email, string token, string resultados, string resultadosEspeciales)
        {
            DAOUsuario usuarioDAO = new DAOUsuario();
            DAOPronostico pronosticoDAO = new DAOPronostico();
            try
            {
                if (DateTime.Now > new DateTime(2013, 6, 15, 18, 50, 0))
                {
                    ViewBag.Mensaje = "El plazo para enviar pronósticos ha finalizado";
                    ViewBag.ColorTexto = "Red";
                    return PartialView("_Mensaje");
                }
                usuarioDAO.AsociarMailToken(email, token);
                Usuario u = usuarioDAO.GetUsuarioPorToken(token);
                pronosticoDAO.GuardarPronostico(resultados, u);
                pronosticoDAO.GuardarPronosticosEspeciales(resultadosEspeciales, u);

                ViewBag.Mensaje = "Su pronóstico ha sido enviado. Para consultarlo presione el botón \"Ver Pronóstico\" arriba de la tabla";
                ViewBag.ColorTexto = "Green";
                return PartialView("_Mensaje");
            }
            catch (YaEstaAsociadoElTokenConOtroUsuarioException)
            {
                ViewBag.Mensaje = "Código inválido";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
            catch (NoExisteElTokenException)
            {
                ViewBag.Mensaje = "Código inválido";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
            catch (YaEstaAsociadoElUsuarioConElTokenException)
            {
                ViewBag.Mensaje = "Ya ha realizado su pronóstico. Click aquí para verlo";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
            catch (Exception)
            {
                ViewBag.Mensaje = "Ocurrió un error inesperado. Inténtelo más tarde o contáctenos";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
            //catch (YaExisteUsuarioException)
            //{
            //    Usuario u = usuarioDAO.GetUsuarioPorEmail(email);
            //    if (!token.Equals(usuarioDAO.GetTokenPorEmail(email)))
            //    {
            //        ViewBag.Mensaje = "Código inválido";
            //        ViewBag.ColorTexto = "Red";
            //        return PartialView("_Mensaje");
            //    }
            //    if (u.EnvioPronostico)
            //    {
            //        ViewBag.Mensaje = "Ya ha realizado su pronóstico. Click aquí para verlo";
            //        ViewBag.ColorTexto = "Red";
            //        return PartialView("_Mensaje");
            //    }
            //    else
            //    {
            //        ViewBag.ColorTexto = "Red";
            //        return PartialView("_Mensaje");
            //    }
            //}
        }

        public PartialViewResult EnviarMail(string mail, string mensaje)
        {
            DAOMail mailDAO = new DAOMail();
            try
            {
                mailDAO.EnviarMail("pencasblanqueada@gmail.com", "Contacto", "pencas123", "pencasblanqueada@gmail.com", "", "Contacto", mensaje + "Mail enviado por: " + mail);
                ViewBag.Mensaje = "Se envió correctamente el mensaje. Responderemos a la brevedad";
                ViewBag.ColorTexto = "Green";
                return PartialView("_Mensaje");
            }
            catch (Exception)
            {
                ViewBag.Mensaje = "Ocurrió un error. Inténtelo más tarde";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
        }

        public PartialViewResult VerPronostico(string token)
        {
            DAOUsuario usuarioDAO = new DAOUsuario();
            DAOPronostico pronosticoDAO = new DAOPronostico();
            Usuario usuario;
            try
            {
                usuario = usuarioDAO.GetUsuarioPorToken(token);
            }
            catch (NoExisteUsuarioException)
            {
                ViewBag.Mensaje = "Código inválido";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
            string pronosticos = pronosticoDAO.RecuperarPronostico(usuario);
            ViewBag.Pronosticos = pronosticos.Split(';');
            return PartialView("_VerPronosticos");
        }

        public ActionResult VerPronosticoDeUsuario(string idUsuario)
        {
            DAOUsuario usuarioDAO = new DAOUsuario();
            DAOPronostico pronosticoDAO = new DAOPronostico();
            Usuario usuario;
            usuario = usuarioDAO.GetUsuarioPorId(int.Parse(idUsuario));
            string pronosticos = pronosticoDAO.RecuperarPronostico(usuario);
            ViewBag.Pronosticos = pronosticos.Split(';');
            return View("Pronostico");
        }

        public ActionResult About()
        {
            return View();
        }

        public ActionResult VerTabla()
        {
            DAOPronostico pronosticoDAO = new DAOPronostico();
            List<string[]> posiciones = pronosticoDAO.GetPositions();
            ViewBag.Posiciones = posiciones;
            return View("Posiciones");
        }

        public PartialViewResult GetUserScoreAndPosition(string token)
        {
            DAOPronostico pronosticoDAO = new DAOPronostico();
            List<string[]> resultados = new List<string[]>();
            try
            {
                resultados = pronosticoDAO.GetUserScoreAndPosition(token);
            }
            catch (NoExisteUsuarioException)
            {
                ViewBag.ColorTexto = "Red";
                ViewBag.Mensaje = "No hay jugadas registradas con ese e-mail";
                return PartialView("_Mensaje");
            }
            catch (Exception)
            {
                ViewBag.ColorTexto = "Red";
                ViewBag.Mensaje = "Ocurrió un error inesperado. Inténtelo más tarde";
                return PartialView("_Mensaje");
            }
            ViewBag.Resultados = resultados;
            return PartialView("_ListaPronosticos");
        }
    }
}